// Copyright 2012 dmitry.a.novikov@gmail.com
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
// http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "consistenz.h"
#include "valueint.h"
#include "objectimpl.h"

namespace CnsZ {

  DEFINE_CNSZ_CLASS(ValueInt, Object, OBJECTIMPL_FACTORY);

  P<ValueInt> ValueInt::New(Int64 val) {
    return ImplRefCount<ValueInt, ValueInt>::New()->set(val);
  }

  int ValueInt::compare(const Object* other) const {
    if(this==other) {
      return 0;
    }
    P<ValueInt> otherValueInt = castTo<ValueInt>(other);
    if(otherValueInt.get()) {
      Int64 dif = val - otherValueInt->val;
      if(dif > 0) return +1;
      if(dif < 0) return -1;
      return 0;
    }
    return Object::compare(other);
  }

  String ValueInt::toString() const {
    std::wostringstream s;
    s << val;
    return String(s.str().data());
  }

}
